import '../models/user_model.dart';
import 'package:flutter/foundation.dart';
import 'package:shared_preferences/shared_preferences.dart';

class UserData {
  // 存储预设的用户信息
  static final Map<String, User> _users = {
    'admin': User(
      id: 'admin001',
      name: '管理员',
      email: 'admin@example.com',
      avatar: 'assets/default_avatar.png',
      examHistoryIds: ['exam001', 'exam002'],
    ),
    'teacher': User(
      id: 'teacher001',
      name: '教师用户',
      email: 'teacher@example.com',
      avatar: 'assets/default_avatar.png',
      examHistoryIds: ['exam001'],
    ),
    'student': User(
      id: 'student001',
      name: '学生用户',
      email: 'student@example.com',
      avatar: 'assets/default_avatar.png',
      examHistoryIds: [],
    ),
  };

  // 存储用户名和密码对应关系（实际应用中应使用加密存储）
  static final Map<String, String> _passwords = {
    'admin': 'bmjabcd1234',
    'teacher': 'bmjabcd1234',
    'student': 'bmjabcd1234',
  };

  // 当前登录的用户
  static User? _currentUser;

  // 标记当前用户是否为管理员
  static bool _isAdminUser = false;

  // 初始化标记
  static bool _initialized = false;
  
  // 获取当前用户是否为管理员
  static bool get isAdminUser => _isAdminUser;
  
  // 设置当前用户的管理员状态
  static set isAdminUser(bool value) {
    _isAdminUser = value;
  }

  // 获取当前登录用户
  static User? get currentUser => _currentUser;
  
  // 设置当前登录用户
  static set currentUser(User? user) {
    _currentUser = user;
    // 当设置用户时，自动判断是否为管理员
    _isAdminUser = (user?.id == 'admin001');
    debugPrint('🔍 UserData.currentUser 设置完成:');
    debugPrint('  - 用户ID: ${user?.id}');
    debugPrint('  - 用户姓名: ${user?.name}');
    debugPrint('  - 是否为管理员: $_isAdminUser');
  }

  // 初始化用户数据（加载保存的密码）
  static Future<void> init() async {
    if (_initialized) return;

    try {
      final prefs = await SharedPreferences.getInstance();
      final savedAdminPassword = prefs.getString('admin_password');

      if (savedAdminPassword != null && savedAdminPassword.isNotEmpty) {
        _passwords['admin'] = savedAdminPassword;
        debugPrint('✅ 已加载保存的管理员密码');
      } else {
        debugPrint('ℹ️ 使用默认管理员密码');
      }

      _initialized = true;
    } catch (e) {
      debugPrint('❌ 初始化用户数据失败: $e');
      _initialized = true; // 即使失败也标记为已初始化，避免重复尝试
    }
  }

  // 验证管理员密码
  static bool verifyAdminPassword(String password) {
    return _passwords['admin'] == password;
  }

  // 修改管理员密码
  static Future<bool> changeAdminPassword(String oldPassword, String newPassword) async {
    // 验证原密码
    if (!verifyAdminPassword(oldPassword)) {
      return false;
    }

    try {
      // 更新内存中的密码
      _passwords['admin'] = newPassword;

      // 保存到持久化存储
      final prefs = await SharedPreferences.getInstance();
      await prefs.setString('admin_password', newPassword);

      debugPrint('✅ 管理员密码已更新并保存到持久化存储');
      return true;
    } catch (e) {
      debugPrint('❌ 保存管理员密码失败: $e');
      // 如果保存失败，恢复原密码
      _passwords['admin'] = oldPassword;
      return false;
    }
  }

  // 用户登录方法
  static bool login(String username, String password) {
    // 检查用户名是否存在
    if (!_users.containsKey(username)) {
      return false;
    }

    // 验证密码
    if (_passwords[username] != password) {
      return false;
    }

    // 登录成功，设置当前用户
    _currentUser = _users[username];
    // 设置是否为管理员
    _isAdminUser = (username == 'admin');
    return true;
  }

  // 用户退出登录
  static void logout() {
    _currentUser = null;
    _isAdminUser = false;
  }

  // 获取所有用户信息（仅供管理员使用）
  static List<User> getAllUsers() {
    return _users.values.toList();
  }

  // 更新用户信息
  static void updateUser(User updatedUser) {
    if (_users.containsKey(updatedUser.id)) {
      _users[updatedUser.id] = updatedUser;
      // 如果更新的是当前用户，也更新当前用户信息
      if (_currentUser?.id == updatedUser.id) {
        _currentUser = updatedUser;
      }
    }
  }
} 